package echat.future.cn.echat;

import android.app.AlarmManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.text.TextUtils;

import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider;
import com.fm.openinstall.OpenInstall;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.EaseUI;
import com.netease.nim.avchatkit.AVChatKit;
import com.netease.nim.avchatkit.config.AVChatOptions;
import com.netease.nim.avchatkit.model.ITeamDataProvider;
import com.netease.nim.avchatkit.model.IUserInfoProvider;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.auth.LoginInfo;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.uinfo.UserInfoProvider;
import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tencent.tauth.Tencent;
import com.zhusx.core.ZsxApplicationManager;

import java.util.TimeZone;

import cn.jpush.android.api.JPushInterface;
import echat.future.cn.echat.my.bean.WxLoginBean;
import echat.future.cn.echat.my.utils.ActivityNameContanct;
import echat.future.cn.echat.my.utils.Contancts;
import echat.future.cn.echat.my.utils.HttpUtilsRequst;
import echat.future.cn.echat.my.utils.RouterHelper;
import echat.future.cn.echat.my.utils.UserHelper;
import echat.future.cn.echat.my.view.RechargeActivity;
import echat.future.cn.echat.netease.DemoCache;
import echat.future.cn.echat.netease.NIMInitManager;
import echat.future.cn.echat.utils.LogHelper;
import lumingweihua.future.cn.baselibgxh.base.MyApplication;
import lumingweihua.future.cn.baselibgxh.utils.MD5;

/**
 * Author       zhusx
 * Email        327270607@qq.com
 * Created      2018/3/16 17:41
 */

public class AppApplication extends MyApplication {
    public static AppApplication appApplication;
    private UserInfo userInfo;

    public static WxLoginBean wxLoginBean =new WxLoginBean();
    private IWXAPI iwxapi;


    public static String buck = "echat-voide";

    public static OSS oss = null;

    public IWXAPI getIwxapi() {
        return iwxapi;
    }

    @Override
    public void onCreate() {
//        SharedPreference.saveToSP(this, "userToken", "cb97a780c081a49154bed3aa50842ff4");
        super.onCreate();
        isGotoCharge = false;
        appApplication = this;
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider("LTAIAGoi6yhIZq5m", "ARvnaARYeXzr1xOS5upcqDcmNcQEZp");
        oss = new OSSClient(this, endpoint, credentialProvider);
        ZsxApplicationManager.builder(this).setLogDebug(BuildConfig.DEBUG).build();

//        MobSDK.init(this);
//        //环信
//        EMOptions options = new EMOptions();
//        options.setAutoLogin(true);
//        //初始化
//        EaseUI.getInstance().init(this, options);
//        EMClient.getInstance().setDebugMode(true);
          initChUtils();

        //环信
        EMOptions options = new EMOptions();
        options.setAutoLogin(true);
        //初始化
        EaseUI.getInstance().init(this, options);
        // SDK初始化（启动后台服务，若已经存在用户登录信息， SDK 将完成自动登录）
        NIMClient.init(this, loginInfo(), options());
        userInfo = new UserInfo() {
            @Override
            public String getAccount() {
                return neteaseAccount;
            }

            @Override
            public String getName() {
                return neteaseAccount;
            }

            @Override
            public String getAvatar() {
                return null;
            }
        };

        DemoCache.setContext(this);
        DemoCache.setAccount(neteaseAccount);
        // 4.6.0 开始，第三方推送配置入口改为 SDKOption#mixPushConfig，旧版配置方式依旧支持。
 //      NIMClient.init(this, getLoginInfo(), NimSDKOptionConfig.getSDKOptions(this));
        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);

        // 以下逻辑只在主进程初始化时执行
        if (NIMUtil.isMainProcess(this)) {
            OpenInstall.init(this);
            // init pinyin
            // 初始化UIKit模块
//            initUIKit();
            // 初始化消息提醒
            NIMClient.toggleNotification(true);
            // 云信sdk相关业务初始化
            NIMInitManager.getInstance().init(true);
            // 初始化音视频模块
            initAVChatKit();
            // 初始化rts模块
//            initRTSKit();
        }
    }

    private void initAVChatKit() {
        AVChatOptions avChatOptions = new AVChatOptions(){
            @Override
            public void logout(Context context) {
//                MainActivity.logout(context, true);
            }
        };
        avChatOptions.entranceActivity = MainActivity.class;
        avChatOptions.notificationIconRes = R.drawable.ic_stat_notify_msg;
        AVChatKit.init(avChatOptions);

        // 初始化日志系统
        LogHelper.init();
        // 设置用户相关资料提供者
        AVChatKit.setUserInfoProvider(new IUserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return userInfo;
            }

            @Override
            public String getUserDisplayName(String account) {
                return userInfo.getName();
            }
        });
        // 设置群组数据提供者
        AVChatKit.setTeamDataProvider(new ITeamDataProvider() {
            @Override
            public String getDisplayNameWithoutMe(String teamId, String account) {
                return  userInfo.getName();
            }

            @Override
            public String getTeamMemberDisplayName(String teamId, String account) {
                return  userInfo.getName();
            }
        });
    }

    // 如果返回值为 null，则全部使用默认参数。
    private SDKOptions options() {
        SDKOptions options = new SDKOptions();

        // 如果将新消息通知提醒托管给 SDK 完成，需要添加以下配置。否则无需设置。
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        config.notificationEntrance = MainActivity.class; // 点击通知栏跳转到该Activity
        config.notificationSmallIconId = R.drawable.ic_launcher;
        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;
        // 通知铃声的uri字符串
        config.notificationSound = "android.resource://com.netease.nim.demo/raw/msg";
        options.statusBarNotificationConfig = config;

        // 配置保存图片，文件，log 等数据的目录
        // 如果 options 中没有设置这个值，SDK 会使用采用默认路径作为 SDK 的数据目录。
        // 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
//        String sdkPath = getAppCacheDir(applicationContext) + "/nim"; // 可以不设置，那么将采用默认路径
        // 如果第三方 APP 需要缓存清理功能， 清理这个目录下面个子目录的内容即可。
//        options.sdkStorageRootPath = sdkPath;

        // 配置是否需要预下载附件缩略图，默认为 true
        options.preloadAttach = true;

        // 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小
        // 该值一般应根据屏幕尺寸来确定， 默认值为 Screen.width / 2
//        options.thumbnailSize = ${Screen.width} / 2;

        // 用户资料提供者, 目前主要用于提供用户资料，用于新消息通知栏中显示消息来源的头像和昵称
        options.userInfoProvider = new UserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return null;
            }


            @Override
            public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                           SessionTypeEnum sessionType) {
                return null;
            }

            @Override
            public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionType, String sessionId) {
                return null;
            }
        };
        return options;
    }

    // 如果已经存在用户登录信息，返回LoginInfo，否则返回null即可
    private LoginInfo loginInfo() {
        if(!TextUtils.isEmpty(MyApplication.getInstance().getNeteaseToken())){
            return new LoginInfo(MyApplication.getInstance().getNeteaseAccount(), MD5.Md5("123456"));
        }
        return null;
    }

    /**
     * 配置 APP 保存图片/语音/文件/log等数据的目录
     * 这里示例用SD卡的应用扩展存储目录
     */
//    static String getAppCacheDir(Context context) {
//        String storageRootPath = null;
//        try {
//            // SD卡应用扩展存储区(APP卸载后，该目录下被清除，用户也可以在设置界面中手动清除)，请根据APP对数据缓存的重要性及生命周期来决定是否采用此缓存目录.
//            // 该存储区在API 19以上不需要写权限，即可配置 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
//            if (context.getExternalCacheDir() != null) {
//                storageRootPath = context.getExternalCacheDir().getCanonicalPath();
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        if (TextUtils.isEmpty(storageRootPath)) {
//            // SD卡应用公共存储区(APP卸载后，该目录不会被清除，下载安装APP后，缓存数据依然可以被加载。SDK默认使用此目录)，该存储区域需要写权限!
//            storageRootPath = Environment.getExternalStorageDirectory() + "/" + "echat.future.cn.echat";
//        }
//
//        return storageRootPath;
//    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
    }



    public static Tencent tencent;
    /**
     * @author ch
     */
    private void initChUtils(){
        tencent = Tencent.createInstance("1105986795", this.getApplicationContext());
        RouterHelper.init(ActivityNameContanct.loginActivityClsName);
        UserHelper.init(this);
        HttpUtilsRequst.init(this);
        regToWx();
    }

    public UserInfo getUserInfo() {
        return userInfo;
    }

    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }

//    private LoginInfo getLoginInfo() {
//        String account = neteaseAccount;
//        String token = neteaseToken;
//
//        if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {
//            DemoCache.setAccount(account.toLowerCase());
//            return new LoginInfo(account, token);
//        } else {
//            return null;
//        }
//    }

    /**
     * 注册到微信
     */
    private void regToWx(){
        iwxapi = WXAPIFactory.createWXAPI(this, Contancts.WECHAT_APPID,true);
        iwxapi.registerApp(Contancts.WECHAT_APPID);
    }

    public static boolean isGotoCharge = false;
    @Override
    public void gotoCharge() {
        super.gotoCharge();
        isGotoCharge = true;
        MainActivity.mainActivity.gotoCharge();
//        startActivity(new Intent(MainActivity.mainActivity,RechargeActivity.class));
//        RechargeActivity.openActivity(MainActivity.mainActivity,RechargeActivity.class);
    }
}
